/*
 * @Author: 0x9DEFA478
 * @Date: 2025-10-04 18:19:18
 * @LastEditTime: 2025-10-05 23:00:59
 * @LastEditors: 0x9DEFA478
 * @Description: 实现自定义HID数据的收发 假定设备只有一个输出报告, 一个输入报告, 报告中无ReportID, 无Feature报告支持
 * 
 */
#ifndef hSystemAPI_Windows_Device_HID_HPP_
#define hSystemAPI_Windows_Device_HID_HPP_
#if defined(_WIN32)
#include <string>
#include <list>
#endif


namespace SystemAPI{

  namespace Windows{

#if defined(_WIN32)
    class Device_HID{

      public:
        Device_HID();
        Device_HID(const std::string& Path);
        ~Device_HID()noexcept;

        Device_HID(const Device_HID&)=delete;
        Device_HID(Device_HID&& device_hid)noexcept;

        Device_HID& operator=(const Device_HID&)=delete;
        Device_HID& operator=(Device_HID&& device_hid)noexcept;

        std::string Path()const noexcept{return path;}
        std::string ProductString()const noexcept{return productString;}
        int InputReportSize()const noexcept;
        int OutputReportSize()const noexcept;

        void Open(bool InfoMode);
        void Close()noexcept;

        //返回 -2:被终止 -1:超时 0:连接断开 大于0:读取到的数据长度 异常:错误信息
        int Read(void* Buffer,int BufferSize,int Timeout);

        //返回 -2:被终止 -1:超时 0:连接断开 大于0:读取到的数据长度 异常:错误信息
        int Write(const void* Data,int DataLength,int Timeout);

        static std::list<std::string> FindDeviceList();

      private:
        void InfoUpdate();

      private:
        std::string path;
        std::string productString;
        void* privateData;
    };
#endif

  }
}


#endif //hSystemAPI_Windows_Device_HID_HPP_
